home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994…tember: Reference Library / Dev.CD Sep 94.toast / Periodicals / develop / develop Issue 18 / develop 18 code / OSA Sample / Sources / AEStream_CPlus.h < prev    next >
Encoding:
Text File  |  1992-09-17  |  4.2 KB  |  124 lines  |  [TEXT/MPS ]

  1. ////
  2. ////    AEStream_CPlus.h        A (write-only) stream for creating AE Descriptors.
  3. ////                            This header file for use with C++. Use AEStream.h with C.
  4. ////
  5. ////    By Jens Alfke            ©1991-1992 Apple Computer, Inc. All rights reserved.
  6. ////
  7.  
  8.  
  9. // NOTE: In case of disagreement between this header and the C one (AEStream.h),
  10. //         the C header is correct and this header needs to be fixed.
  11.  
  12.  
  13. #ifndef __AESTREAM__
  14.     #define __AESTREAM__
  15.  
  16. #ifndef __MEMORY__
  17.     #include <Memory.h>
  18. #endif
  19. #ifndef __APPLEEVENTS__
  20.     #include <AppleEvents.h>
  21. #endif
  22.  
  23. const errAEStream_BadNesting    = 13579;    // Bad descriptor/array nesting error
  24.  
  25. //    Here are the C-style definitions, which are the actual functions implemented:
  26.  
  27. struct AEStream;
  28.  
  29. extern "C" {
  30.     OSErr
  31.         AEStream_Open        ( AEStream* ),
  32.         AEStream_Close        ( AEStream*, AEDesc *desc =NULL ),
  33.  
  34.         AEStream_WriteDesc    ( AEStream*, DescType type, const void *data, Size length ),
  35.         AEStream_WriteAEDesc( AEStream*, const AEDesc &desc ),
  36.  
  37.         AEStream_OpenDesc    ( AEStream*, DescType type ),
  38.         AEStream_WriteData    ( AEStream*, const void *data, Size length ),
  39.         AEStream_CloseDesc    ( AEStream* ),
  40.  
  41.         AEStream_OpenList    ( AEStream* ),
  42.         AEStream_CloseList    ( AEStream* ),
  43.  
  44.         AEStream_OpenRecord    ( AEStream*, DescType type ),
  45.         AEStream_SetRecordType( AEStream* s, DescType type ),
  46.         AEStream_CloseRecord( AEStream* ),
  47.  
  48.         AEStream_WriteKeyDesc(AEStream*, AEKeyword key,
  49.                                             DescType type, const void *data, Size length ),
  50.         AEStream_OpenKeyDesc( AEStream*, AEKeyword key, DescType type ),
  51.         AEStream_WriteKey    ( AEStream*, AEKeyword key ),
  52.  
  53.         AEStream_CreateEvent( AEStream*, AEEventClass, AEEventID,
  54.                                 DescType targetType, const void *targetData, long targetLength,
  55.                                 short returnID =kAutoGenerateReturnID,
  56.                                 long transactionID =kAnyTransactionID ),
  57.         AEStream_OpenEvent    ( AEStream*, AppleEvent& ),
  58.         AEStream_OptionalParam( AEStream*, AEKeyword key );
  59. }
  60.  
  61. // Here are the data structures, complete with fancy C++ inline methods to call the above fns:
  62.  
  63.  
  64. struct AEStream {        // A (write-only) stream on an AE descriptor
  65.     public:
  66.     
  67.     inline AEStream( )                            {AEStream_Open(this);}
  68.     inline AEStream( AppleEvent &aevt )            {AEStream_OpenEvent(this,aevt);}
  69.     inline AEStream( AEEventClass Class, AEEventID id,
  70.                      DescType targetType, const void *targetData, long targetLength,
  71.                      short returnID =kAutoGenerateReturnID,
  72.                      long transactionID =kAnyTransactionID )
  73.                                                  {AEStream_CreateEvent(this,Class,id,
  74.                                                          targetType,targetData,targetLength,
  75.                                                          returnID,transactionID);}
  76.     inline ~AEStream()                            {AEStream_Close(this);}
  77.     // I'm having doubts about these constructors, since constructors can't
  78.     // return error results .... Hmm?
  79.     
  80.     inline OSErr
  81.         Close        ( AEDesc *desc =NULL )
  82.                                                 {return AEStream_Close(this,desc);}
  83.  
  84.         OpenDesc    ( DescType type )
  85.                                                 {return AEStream_OpenDesc(this,type);}
  86.         WriteData    ( const void *data, Size length )
  87.                                                 {return AEStream_WriteData(this,data,length);}
  88.         CloseDesc    ( void )
  89.                                                 {return AEStream_CloseDesc(this);}
  90.  
  91.         WriteDesc    ( DescType type, const void *data, Size length )
  92.                                                 {return AEStream_WriteDesc(this,type,data,length);}
  93.         WriteDesc    ( const AEDesc &desc )
  94.                                                 {return AEStream_WriteAEDesc(this,desc);}
  95.  
  96.         OpenList    ( void )
  97.                                                 {return AEStream_OpenList(this);}
  98.         CloseList    ( void )
  99.                                                 {return AEStream_CloseList(this);}
  100.  
  101.         OpenRecord    ( DescType type )
  102.                                                 {return AEStream_OpenRecord(this,type);}
  103.         SetRecordType( DescType type )
  104.                                                 {return AEStream_SetRecordType(this,type);}
  105.         CloseRecord    ( void )
  106.                                                 {return AEStream_CloseRecord(this);}
  107.  
  108.         WriteKeyDesc( AEKeyword key, DescType type, void *data, Size length )
  109.                                         {return AEStream_WriteKeyDesc(this,key,type,data,length);}
  110.         OpenKeyDesc    ( AEKeyword key, DescType type )
  111.                                                 {return AEStream_OpenKeyDesc(this,key,type);}
  112.         WriteKey    ( AEKeyword key )
  113.                                                 {return AEStream_WriteKey(this,key);}
  114.     private:
  115.         Handle    data;                    // The data
  116.         Size    size;                    // Current size of handle [same as GetHandleSize(data)]
  117.         Size    index;                    // Current index (into data handle) to write to
  118.         Size    headIndex;                // Offset of header [type field] of open descriptor
  119.         char    context;                // What context am I in? [enum]
  120.         char    isEvent;                // Is this an Apple Event? [Boolean]
  121. };
  122.  
  123.  
  124. #endif